home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Interactive Reference Guide / C-C++ Interactive Reference Guide.iso / c_ref / csource5 / 349_01 / sss.arc / EX_0805.C < prev    next >
Encoding:
C/C++ Source or Header  |  1991-04-10  |  1.9 KB  |  93 lines

  1. /* Program EX_0805.C
  2.    Listing 17C - see documentation in TUTOR.SSS
  3. */
  4.  
  5. #include "SSSC.H"
  6.  
  7. #define  ARRIVL  1
  8. #define  STARTA  2
  9. #define  ENDACT  3
  10. #define  NEXTAC  4
  11. #define  REPORT  5
  12.  
  13. #define  TIMEL   120
  14. #define  REPTME   -1
  15. #define  SSIZE     4
  16.  
  17. #define signal printf("Simulated time %6.2f\x1b[79D",T())
  18.  
  19. int n, countr, server, ecode;
  20.  
  21. void prime()
  22. {
  23.   n = 0;
  24.   countr = 0;
  25.   server = 1;
  26.   INIQUE(1, 1, 1);
  27.   INISTA(1,"bus", 1, 0, 0, 0);
  28.   TALLY(1, server);
  29.   CREATE(0, n);
  30.   CREATE(TIMEL, REPTME);
  31. }
  32.  
  33. main()
  34. {
  35.   prime();
  36.  
  37.   do
  38.   {
  39.     if ((ecode = NEXTEV()) > 0)
  40.     switch(ecode)
  41.     {
  42.  
  43.       case ARRIVL :
  44.               if (IDE() == REPTME) SCHED(0, REPORT, IDE());
  45.               else
  46.               {
  47.                 n = n + 1;
  48.                 signal;
  49.                 SETA(1, EX(0.9));
  50.                 CREATE(EX(1), n);
  51.                 SCHED(0, NEXTAC, IDE());
  52.               }
  53.               break;
  54.  
  55.       case NEXTAC :
  56.               if (server) SCHED(0, STARTA, IDE());
  57.               else QUEUE(1, 0);
  58.               break;
  59.  
  60.       case STARTA :
  61.               SCHED(A(1), ENDACT, IDE());
  62.               server = server - 1;
  63.               TALLY(1,server);
  64.               break;
  65.  
  66.       case ENDACT :
  67.               DISPOS();
  68.               server = server + 1;
  69.               TALLY(1, server);
  70.               if (NQ(1))
  71.               {
  72.                  REMVFQ(1,1);
  73.                  SCHED(0, STARTA, IDE());
  74.               }
  75.               break;
  76.  
  77.       case REPORT :
  78.               SCHED(TIMEL, REPORT, IDE());
  79.               if (countr == 0)
  80.                 printf("# average avail.s         \n");
  81.               else
  82.                 printf("%1d%8.1f%8.3f             \n",
  83.            countr, QAVG(1), SAVG(1));
  84.               CLEARQ(1);
  85.               CLEARS(0);
  86.               countr = countr + 1;
  87.               if (countr > SSIZE) SIMEND(0);
  88.               break;
  89.  
  90.     }
  91.   } while(ecode);
  92. }
  93.